<?php

class ErrorController extends Zend_Controller_Action
{

    public function errorAction()
    {

        $errors = $this->_getParam('error_handler');
        $log = $this->getLog();

        switch ($errors->type)
        {
            //  case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:

                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'Error 404 - Page not found';
                if ($log)
                {
                    $log->crit($this->view->message . ' ' . $_SERVER['REQUEST_URI']);
                }
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $this->view->message = 'Error 500 - Internal Server Error :-(';

                $class_name = get_class($errors->exception);


                if ($class_name == "Zend_Http_Client_Adapter_Exception")
                {
                    $this->getResponse()->setHttpResponseCode(503); // service not available
                    $msg = $errors->exception->getMessage();

                    if (strstr($msg, "tinysong"))
                    {
                        $this->view->message = "Error - Grooveshark.com offline :-(";
                    }

                    if (strstr($msg, "last.fm"))
                    {
                        $this->view->message = "Error - Last.fm offline :-(";
                    }
                }


                if ($log)
                {
                    $log->crit($this->view->message . ' ' . $errors->exception->getTraceAsString());
                }


                break;
        }


        if (APPLICATION_ENV == 'development')
        {
            echo Debug::processException($errors->exception, true);
            die;
        }
        //$this->_helper->ViewRenderer->setNoRender(true);
        //$this->_helper->layout->disableLayout(true);


        $this->view->env = APPLICATION_ENV;
        $this->view->exception = $errors->exception;
        $this->view->request = $errors->request;

        // Log exception, if logger available
        // conditionally display exceptions
        if ($this->getInvokeArg('displayExceptions') == true)
        {
            $this->view->exception = $errors->exception;
        }
    }

    public function getLog()
    {
        $bootstrap = $this->getInvokeArg('bootstrap');
        if (!$bootstrap->hasPluginResource('Log'))
        {
            return false;
        }
        $log = $bootstrap->getResource('Log');
        return $log;
    }

}

